global diagonal
extern malloc

section .text

diagonal:
	
	push rbp
	mov rbp, rsp
	push r15
	push rsi
	push rdi
	

	xor rcx, rcx		;pongo en 0 el registro del loop
	mov cx, si		;muevo el 1er operando 
	mov rsi, rcx
	mov rdi, rsi
	shl rdi, 1
	sub rsp, 8
	call malloc
	add rsp, 8
	mov r15, rax

	pop rdi
	pop rsi

	xor rcx, rcx		;pongo en 0 el registro del loop
	mov cx, si		;muevo el 1er operando 
	mov rsi, rcx

.ciclo:
	mov r8w, [rdi]
	mov [rax], r8w
	lea rdi, [rdi+2*rsi+2]
	lea rax, [rax+2] 

	loop .ciclo
	
.fin:
	mov rax, r15
	pop r15
	pop rbp
	ret

